Backpressure signaling is commonly employed in flow control techniques used in data communications systems. These techniques can be used on communication links between data communications systems, and also for communications between subsystems of data communications systems. Generally, the purpose of such backpressure flow control techniques is to prevent data packet loss at receiver queues caused by overflowing those queues.
Legacy backpressure flow control techniques typically employ simple on-off signaling. According to this technique, crossing a fill-level threshold at a receiver queue causes a backpressure signal (e.g. halt) to be generated, which is then sent to the source of the data packets. In the case of inter-system communication, the data packet source would typically be a transmit buffer of another data communications system. In the case of intra-system communication, the data packet source would typically be an egress queue of a subsystem and the receiver queue would be an ingress queue of another subsystem. One type of backpressure signal (e.g. halt) indicates to the source that it should suspend sending data packets to that queue until further notice, which will be given in the form of another type of backpressure signal (e.g. resume). In some cases there can be more than one data packet source, and in those cases the backpressure signals would normally be sent to all of those sources. This technique has been highly successful in data communications systems because it is simple to implement; requiring only a limited amount of information to be sent back to the transmitting source to process.
More advanced backpressure flow control techniques are known that offer more than simple on-off signaling. These include techniques that progressively throttle the flow rate of data packets to a queue as successively higher fill-level thresholds are exceeded at the queue. Other techniques have means for applying backpressure flow control to data packets of only certain priorities. However, using priority alone may not be enough in some cases, especially when it is desirable to selectively provide individual flow control to one or more types of traffic flows irrespective of the priority of data packets in those flows.
One of the challenges in designing state of the art traffic management for a data communications system is that internal congestion of the system is often due to performance limits of packet processing and traffic management engines of the system as well as limitations on their bus interfaces. These limitations typically result in a backpressure flow control solution that has limited capability to react flexibly to such congestion.
Accordingly, there is a need to a provide backpressure flow control that can be flexibly applied to various types of traffic flows carried by a data communications system.